package fiuba.algo3.vista;

import java.util.ArrayList;
import javax.swing.*;
import fiuba.algo3.modelo.factorVial.Obstaculo;
import fiuba.algo3.modelo.factorVial.Sorpresa;
import fiuba.algo3.modelo.mapa.Calle;
import fiuba.algo3.modelo.mapa.Cruce;
import fiuba.algo3.modelo.mapa.Mapa;
import fiuba.algo3.modelo.Direccion;
import fiuba.algo3.modelo.Posicion;
import fiuba.algo3.vista.Imagenes;


public class GSorpresasObstaculos{

	private ArrayList<JLabel> sorpresasYObstaculos;

	private Cruce cruce;
	
	private int X;
	private int Y;

	public GSorpresasObstaculos(int maxWidth,int maxHeight,Mapa mapa){
		
		X = mapa.getAncho();
		Y = mapa.getAlto();
		
		sorpresasYObstaculos = new ArrayList<JLabel>();
		
		//recorrer todos los cruces del mapa buscano sorpresas y obstaculos
		for(int i = 0; i<X;i++){
			for(int j = 0;j<Y;j++){
				cruce = mapa.getCruceEn(new Posicion(i,j));

				agregarSorpresasYObstaculos(i,j,cruce,Direccion.DERECHA);
				agregarSorpresasYObstaculos(i,j,cruce,Direccion.ABAJO);
			}
		}
	}

	private void agregarSorpresasYObstaculos(int i, int j,Cruce unCruce, Direccion unaDireccion) {
		
		if(unCruce.puedoIrHacia(unaDireccion)){
			//auxiliares
			Imagenes imagePath = new Imagenes();
			ImageIcon icon;
			Calle calle = unCruce.getCalleHacia(unaDireccion);
			Sorpresa sorpresa = calle.getSorpresa();
			Obstaculo obstaculo = calle.getObstaculo();
			
			if(sorpresa != null){
				//crear Icono.
				icon = createImageIcon(imagePath.getImagenDe(sorpresa.getClass()));

				//crear JLabel para la sorpresa.
				crearSorpresa(i,j,icon,unaDireccion);
			}
			
			if(obstaculo != null){
				//crear Icono
				icon = createImageIcon(imagePath.getImagenDe(obstaculo.getClass()));
				
				//crear JLabel para el obstaculo.
				crearObstaculo(i,j,icon,unaDireccion);
			}
		}
	}
	
	private void crearSorpresa(int i,int j,ImageIcon icon, Direccion unaDireccion){
		//auxiliar
		JLabel sorpresa;
		
		switch(unaDireccion) {
			case DERECHA: 
				sorpresa = new JLabel(icon);
				sorpresa.setBounds(38+(i*50),(j*50),icon.getIconWidth(),icon.getIconHeight());
				sorpresa.setVisible(true);
				sorpresasYObstaculos.add(sorpresa);
				break;
			case ABAJO: 
				sorpresa = new JLabel(icon);
				sorpresa.setBounds((i*50),38+(j*50),icon.getIconWidth(),icon.getIconHeight());
				sorpresa.setVisible(true);
				sorpresasYObstaculos.add(sorpresa);
				break;
			default: 
				break;
		}
	}

	private void crearObstaculo(int i,int j,ImageIcon icon, Direccion unaDireccion){
		//auxiliar
		JLabel obstaculo;
		
		switch(unaDireccion) {
			case DERECHA: 
				obstaculo = new JLabel(icon);
				obstaculo.setBounds(18+(i*50),(j*50),icon.getIconWidth(),icon.getIconHeight());
				obstaculo.setVisible(true);
				sorpresasYObstaculos.add(obstaculo);
				break;
			case ABAJO: 
				obstaculo = new JLabel(icon);
				obstaculo.setBounds((i*50),18+(j*50),icon.getIconWidth(),icon.getIconHeight());
				obstaculo.setVisible(true);
				sorpresasYObstaculos.add(obstaculo);
				break;
			default: 
				break;
		}	
	}

	protected ImageIcon createImageIcon(String path) {
		java.net.URL imgURL = getClass().getResource("images/"+path);
		if (imgURL != null) {
			return new ImageIcon(imgURL);
		} else {
			System.err.println("no se pudo encontrar la ruta: images/" + path);
		return null;
		}
	}

	public ArrayList<JLabel> getSorpresasYObstaculos(){
		return this.sorpresasYObstaculos;
	}
}